#68小说网的数据采集，使用的方法为xpath,结果最终保存在csv文件中

import csv # 用于数据存储
import requests # 用于请求网页
import chardet # 用于修改编码
import re # 用于提取数据
from lxml import etree # 解析数据的库
import time # 可以粗糙模拟人为请求网页的速度
import warnings # 忽略代码运行时候的警告信息
warnings.filterwarnings("ignore")




def get_data(url):
    # headers是反爬措施的一种，会让浏览器认为是有人使用浏览器去正常请求网页
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}
    #verify是忽略安全证书提示
    rqg = requests.get(url, headers=headers, verify=False)
    #chardet库可以帮你自动检测网页源码的编码
    rqg.encoding = chardet.detect(rqg.content)['encoding']
    html = etree.HTML(rqg.text)

    # 1. 小说名称
    title = html.xpath("/html/body/div[6]/ul/li/span[1]/a/b/text()") #返回的是list
    # print(title)
    # 2. 最新章节
    chapter = html.xpath("/html/body/div[6]/ul/li/span[2]/a/text()")
    # print(chapter)
    # 3. 作者
    author = html.xpath("/html/body/div[6]/ul/li/span[3]/a/text()")
    # print(author)
    # 4. 状态
    state = html.xpath("/html/body/div[6]/ul/li/span[4]/text()")[1:]
    # print(state)
    # 5. 关注
    follow = html.xpath("/html/body/div[6]/ul/li/span[5]/text()")[1:]
    # print(follow)
    values = []
    for i in range(len(title)):
        value=[title[i],chapter[i],author[i],state[i],follow[i]]
        values.append(value)


    return values

def save_to_csv(data):
    with open('data.csv', 'w', newline='') as csvfile:
        #获取对象
        writer = csv.writer(csvfile)
        #写入表头
        writer.writerow(['小说名称', '最新章节', '作者', '状态', '关注'])
        #写入数据
        writer.writerows(data)

def main():
    all_data=[]
    for i in range(1,8):
        url = 'http://www.68xsw.cc/type/3_0_0_lastupdate_'+str(i)+'.html'
        print('>>正获取：',url)
        time.sleep(2)
        data=get_data(url)
        all_data.extend(data)
    save_to_csv(all_data)


if __name__ == '__main__':
    main()
